IF (wv_glist:=CreateContext({wv_glist}))=NIL THEN Raise(ER_CONTEXT)
IF (g_whatview:=CreateGadgetA(BUTTON_KIND,wv_glist,[18,17,91,12,'_Whatview',tattr,0,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
IF (g_info:=CreateGadgetA(BUTTON_KIND,g_whatview,[109,17,91,12,'_Info',tattr,1,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
IF (g_addicon:=CreateGadgetA(BUTTON_KIND,g_info,[200,17,91,12,'_AddIcon',tattr,2,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
IF (g_execute:=CreateGadgetA(BUTTON_KIND,g_addicon,[18,30,91,12,'_Execute',tattr,3,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
IF (g_prefs:=CreateGadgetA(BUTTON_KIND,g_execute,[109,30,91,12,'_Prefs',tattr,4,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
IF (g_quit:=CreateGadgetA(BUTTON_KIND,g_prefs,[200,30,91,12,'_Quit',tattr,5,16,visual,0]:newgadget,[GA_RELVERIFY,TRUE,GA_DISABLED,FALSE,GT_UNDERSCORE,"_",TAG_DONE,0]))=NIL THEN Raise(ER_GADGET)
PROC p_RemoveActionList(list:PTR TO lh,mode) /*"p_RemoveActionList(list:PTR TO lh,mode)"*/
p_CleanActionList(list)
IF mode=TRUE
IF list THEN Dispose(list)
ENDIF
ENDPROC
PROC p_AjouteArgNode(list:PTR TO lh,argname,arglock) /*"p_AjouteArgNode(list:PTR TO lh,argname,arglock)"*/
DEF myarg:PTR TO wvarg
DEF node:PTR TO ln
DEF pv[256]:STRING
DEF fullname[256]:STRING
DEF idstring[9]:STRING
DEF nn,idtype,lock=NIL,fib:fileinfoblock
DEF size
myarg:=New(SIZEOF wvarg)
NameFromLock(arglock,pv,256)
AddPart(pv,'',256)
IF EstrLen(argname)<>0
StringF(fullname,'\s\s',pv,argname)
ELSE
StringF(fullname,'\s',pv)
ENDIF
IF lock:=Lock(fullname,-2)
IF Examine(lock,fib)
size:=fib.size
IF fib.size=0
StringF(fullname,'\s',pv)
StringF(argname,'\s',fib.filename)
ELSE
ENDIF
IF fib THEN Dispose(fib)
ENDIF
IF lock THEN UnLock(lock)
ENDIF
myarg.lock:=DupLock(arglock)
idtype:=WhatIs(fullname,[WI_DEEP,1])
idstring:=GetIDString(idtype)
node:=New(SIZEOF ln)
node.succ:=0
myarg.size:=size
node.name:=String(EstrLen(argname))
StrCopy(node.name,argname,ALL)
CopyMem(node,myarg.node,SIZEOF ln)
AddTail(list,myarg.node)
nn:=p_GetNumNode(list,myarg.node)
IF nn=0
list.head:=myarg.node
node.pred:=0
ENDIF
IF idstring
StringF(pv,'\s',idstring)
myarg.idstring:=String(EstrLen(pv))
StrCopy(myarg.idstring,pv,ALL)
ENDIF
IF node THEN Dispose(node)
ENDPROC
PROC p_RemoveArgList(list:PTR TO lh,mode) /*"p_RemoveArgList(list:PTR TO lh,mode)"*/
DEF rarg:PTR TO wvarg
DEF node:PTR TO ln
rarg:=list.head
WHILE rarg
node:=rarg
IF node.succ<>0
IF node.name THEN DisposeLink(node.name)
IF rarg.lock THEN UnLock(rarg.lock)
/*IF rarg.date THEN Dispose(rarg.date)*/
IF rarg.idstring THEN DisposeLink(rarg.idstring)
ENDIF
IF node.succ=0
RemTail(list)
ELSEIF node.pred=0
RemHead(list)
ELSEIF (node.succ<>0) AND (node.pred<>0)
Remove(node)
ENDIF
rarg:=node.succ
ENDWHILE
IF mode=TRUE
IF list THEN Dispose(list)
ENDIF
ENDPROC
PROC p_WriteFArgList(list:PTR TO lh,action) /*"p_WriteFArgList(list:PTR TO lh,action)"*/
DEF rarg:PTR TO wvarg
DEF node:PTR TO ln
DEF anode:PTR TO actionnode
DEF mode
DEF piv[4096]:STRING
DEF fullname[256]:STRING
DEF mywbarg:PTR TO wbarg,posbuf=NIL
DEF oldcd,retstr[256]:STRING
rarg:=list.head
WHILE rarg
node:=rarg
IF node.succ<>0
SELECT action
CASE ACT_WHATVIEW
IF anode:=FindName(myw.adractionlist,rarg.idstring)
mode:=anode.exectype
IF anode.numarg=0
posbuf:=anode.arglist
ELSE
posbuf:=anode.arglist+(anode.numarg*SIZEOF wbarg)
ENDIF
SELECT mode
CASE MODE_WB
IF anode.numarg<maxarg
anode.numarg:=anode.numarg+1
mywbarg:=New(SIZEOF wbarg)
mywbarg.lock:=rarg.lock
IF node.name
mywbarg.name:=node.name
ELSE
mywbarg.name:=''
ENDIF
CopyMem(mywbarg,posbuf,SIZEOF wbarg)
posbuf:=posbuf+(anode.numarg*SIZEOF wbarg)
IF mywbarg THEN Dispose(mywbarg)
ENDIF
anode.cmd:=0
CASE MODE_CLI
anode.numarg:=-1
NameFromLock(rarg.lock,piv,256)
IF rarg.size<>0 THEN AddPart(piv,node.name,256)
StringF(fullname,' "\s" ',piv)
StringF(piv,'\s \s',anode.cmd,fullname)
IF anode.cmd THEN DisposeLink(anode.cmd)
anode.cmd:=String(EstrLen(piv))
StrCopy(anode.cmd,piv,ALL)
ENDSELECT
ELSE
IF p_MakeWVRequest('Pas de commande pour:\nFichier :\s\nType :\s\nSize :\d\nDate:\s','_Suivant|S_ortie',[node.name,rarg.idstring,rarg.size,rarg.date])=FALSE THEN JUMP exit
ENDIF
CASE ACT_INFO
IF p_MakeWVRequest('Fichier :\s\nType :\s\nSize :\d\nDate:\s','_Suivant|S_ortie',[node.name,rarg.idstring,rarg.size,rarg.date])=FALSE THEN JUMP exit